 /**********************************************************************
 * Fichier : USBDriva.h
 *
 * Résumé : Fichier d'en-tête qui définit les variables globales et les
 *          fonctions usager du pilote.
 *
 * Auteur : Vincent Léger et Francisco Ramos
 *
 * Dernière modification : dimanche 9 décembre 2012
 *
 **********************************************************************/
#ifndef _USBDRIVA_H_
#define _USBDRIVA_H_

 /******************************************
 *********DÉCLARATION DE LIBRAIRIES*********
 ******************************************/
#include "USBDrivaCore.h"       //fonctions "coeur" du pilote et structures personnelles
#include "MyIOCTL.h"            //définition des fonctions IOCTL
#include "DrivaDefinitions.h"   //définitions propre au module
#include "usbvideo.h"           //fichiers de définitions standards USB video
#include "USBDrivaCore.h"       //structures + fonctions internes du pilote
#include "USBDrivaCore.c"       //pour lier les fonctions définies (pallier aux erreurs de makefile)

 /******************************************
 *********DÉCLARATION DE FONCTIONS**********
 ******************************************/
//fonctions usager
int      USBDriva_init (void);
void     USBDriva_exit (void);
static int driva_probe(struct usb_interface *interface, const struct usb_device_id *id);
static void driva_disconnect(struct usb_interface *interface);
static int USBDriva_open(struct inode *inode, struct file* filp);
static int USBDriva_release(struct inode *inode, struct file* filp);
ssize_t  USBDriva_read(struct file *flip, char __user *ubuf, size_t count, loff_t *f_ops);
long USBDriva_ioctl (struct file *filp, unsigned int cmd, unsigned long arg);

/******************************************
*****DÉCLARATION DES STRUCTURES PERSO******
******************************************/
//operations du pilote accessible pour les usagers
static struct file_operations usbdriva_fops =
{
    .owner          = THIS_MODULE,
    .read           = USBDriva_read,
    .open           = USBDriva_open,
    .release        = USBDriva_release,
    .unlocked_ioctl = USBDriva_ioctl,
};
//connexion/deconnexion pour pilote USB (pour USBCORE)
struct usb_driver USBDriva =
{
    .name       = DRIVER_NAME,
    .id_table   = driva_table,
    .probe      = driva_probe,
    .disconnect = driva_disconnect,
};
//definition de la classe
static struct usb_class_driver usbdriva_class =
{
    .name       = DRIVER_FULL_NAME,
    .fops       = &usbdriva_fops,
    .minor_base = DRIVA_MINOR,
};

CAMERA_MOVEMENT movement =
{
    .left   = LEFT_PAN_TILT,
    .right  = RIGHT_PAN_TILT,
    .up     = UP_PAN_TILT,
    .down   = DOWN_PAN_TILT,
};

//installation/désinstallation du module dans le noyau
module_init(USBDriva_init);
module_exit(USBDriva_exit);

#endif  //_USBDRIVA_H_


